package engine;

import java.io.File;
import java.util.List;

import dao.DaoGare;
import dao.DbConnection;
import externaldata.gare.Gare;
import externaldata.gare.GareHelper;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;


@WebListener
public class BackgroundTaskLauncher implements ServletContextListener {

	private Thread backgroundThread = null;
	
	/**
     * Lance un thread qui va checker régulièrement l'API SNCF pour obtenir nos informations
     * en temps réel
     */
    public void contextInitialized(ServletContextEvent servCtxtEvent)  { 
         
    	System.out.println("Context initialized ...");
    	
    	// Tu ne te rechargeras point, mon enfant !!!
    	servCtxtEvent.getServletContext().setAttribute("reloadable", false);
    	
    	
    	
    	
    	
    	// ------------ RECUPERATION DES INFOS GARES ---------------------
    	
    	// Suppression des éventuelles gares précédentes
    	DaoGare.deleteAllGares();
    	
    	// Chemin d'accès aux fichiers de données
    	String fileConfigPath = servCtxtEvent.getServletContext().getRealPath("") + 
    			File.separator + "file_config" + File.separator + "gares_infos.xml";

    	List<Gare> listGares = GareHelper.getGareUicDataFromSourceFile(fileConfigPath);
    	DaoGare.ajouterListe(listGares);
    	
    	// ------------ FIN DES INFOS GARES ------------------------------
    	
    	
    	
    	
    	
    	// ------------ LANCEMENT DU THREAD BACKGROUND -------------------
    	
        backgroundThread = new Thread(new BackgroundTaskEngine(servCtxtEvent.getServletContext()));
        backgroundThread.start();
        
        // ------------ FIN DU LANCEMENT DE THREAD -----------------------
        
        
        
        System.out.println("Background task launched ...");
    }

    /**
     * Doit faire en sorte que le thread lancé soit bien terminé
     */
    public void contextDestroyed(ServletContextEvent arg0) {
         
    	System.out.println("Context detroyed ...");
    	
    	if (backgroundThread != null) {
    		// On tue proprement le thread lancé au démarrage
    		backgroundThread.interrupt();
    		
    		// Et on attend que le thread soit réellement terminé avant de continuer
    		try {
				backgroundThread.join();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
    		
    		System.out.println("Background task stopped ...");
    	}
    	
    	// On ferme la connexion à la BD
    	DbConnection.close();
    }
	
}
